// Object.defineProperty(obj, prop, descriptor) 定义新属性或者修改原有属性
/* 
参数
obj
要定义属性的对象。
prop
要定义或修改的属性的名称或 Symbol 。
descriptor
要定义或修改的属性描述符。
返回值
被传递给函数的对象。
*/
/* 
descriptor 以对象的形式书写
value:设置属性的值  默认值为undefined
writable:值是否可重写  默认为false
enumerable:目标属性是否可以被枚举 默认为false
configurable:目标属性是否可以被删除或是否可以再次修改特性   默认为false
*/
let obj = {
  id: 1,
  pname: '小米',
  price: 19999
}
obj.num = 100
console.log(obj);
obj.price = 2999
console.log(obj); //
/* ------------- */
Object.defineProperty(obj, 'price', {
  value: 10000
})
console.log(obj);
console.log('----------');
Object.defineProperty(obj, 'id', {
  //不允许修改这个属性
  writable: false,
  //不允许遍历这个属性
  enumerable: true,
})
console.log(Object.keys(obj));
console.log(obj);
obj.id = 2
console.log(obj);
console.log('------');
Object.defineProperty(obj, 'address', {
  value: 'nanjing',
  //不允许修改这个属性
  writable: false,
  //允许遍历
  enumerable: true,
  configurable: false //不允许删除这个属性且不能修改这个属性的描述
})
console.log(Object.keys(obj));
delete obj.address
console.log(obj);